package com.hgk.wanwan.login;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.common.android.volley.VolleyError;
import com.common.dongqiuhui.apps.comm.constants.UrlConstans;
import com.hgk.common.common.constants.DataConstants;
import com.hgk.common.common.ui.activity.SimpleBaseActivity;
import com.hgk.common.common.ui.view.RippleView;
import com.hgk.wanwan.login.forgetPas.ForgetPsdActivity;
import com.hgk.wanwan.login.model.LoginBean;
import com.hgk.wanwan.regist.RegistActivity;

import java.util.HashMap;
import java.util.Map;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;
import width.hgk.wanwan.R;

public class LoginActivity extends SimpleBaseActivity implements PlatformActionListener {

    private final String GET_LOGIN_URL = UrlConstans.ZWCOMMOMURL+"domain/user/login.json";
    private LinearLayout mHeaderView;
    private Button btnLeft,btnRight;
    private TextView tv_Title;

    private EditText mEvPhoneNumber,mEvPasWord;
    private RippleView mRioLogin;//登录按钮
    private TextView mTvRegist,mTvForgetPsd;
    private ImageView mIvDelePhone,mDelePasd;
    private ImageView mWeiChatShare,mQQShare,mWeiboShare;
    private String mPhoneNumber,mPasWord;
    private String mType;//
    private String mToken,mUserId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_login);
//        initHeaderView();
        initView();
        initData();
    }
    private void initView() {
        mEvPhoneNumber = (EditText) findViewById(R.id.et_login_phone_number);
        mEvPasWord = (EditText) findViewById(R.id.et_log_user_pasword);
        mRioLogin = (RippleView) findViewById(R.id.rv_ripple_login);

        mTvRegist = (TextView) findViewById(R.id.tv_login_regist);
        mTvForgetPsd = (TextView) findViewById(R.id.tv_login_forgetpsd);

        mIvDelePhone = (ImageView) findViewById(R.id.iv_login_delePhone);
        mDelePasd = (ImageView) findViewById(R.id.iv_login_delete_pasword);
        mWeiChatShare = (ImageView) findViewById(R.id.iv_weichat_icon);
        mQQShare = (ImageView) findViewById(R.id.iv_qq_icon);
        mWeiboShare = (ImageView) findViewById(R.id.iv_weibo_icon);

        mEvPhoneNumber.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    if (!TextUtils.isEmpty(mEvPhoneNumber.getText().toString())){
                        mIvDelePhone.setVisibility(View.VISIBLE);
                    }
                } else {
                    mIvDelePhone.setVisibility(View.GONE);
                }
            }
        });
        mEvPasWord.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    if (!TextUtils.isEmpty(mEvPasWord.getText().toString())) {
                        mDelePasd.setVisibility(View.VISIBLE);
                    }
                } else {
                    mDelePasd.setVisibility(View.GONE);
                }
            }
        });
        mTvForgetPsd.setOnClickListener(this);
        mTvRegist.setOnClickListener(this);
        mIvDelePhone.setOnClickListener(this);
        mDelePasd.setOnClickListener(this);
        mWeiChatShare.setOnClickListener(this);
        mQQShare.setOnClickListener(this);
        mWeiboShare.setOnClickListener(this);

        if (!TextUtils.isEmpty(mEvPhoneNumber.getText().toString())){
            mPhoneNumber = mEvPhoneNumber.getText().toString();
        }
        if (!TextUtils.isEmpty(mEvPasWord.getText().toString())){
            mPasWord = mEvPasWord.getText().toString();
        }

        mRioLogin.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
            @Override
            public void onComplete(RippleView rippleView) {
                if (!TextUtils.isEmpty(mEvPhoneNumber.getText().toString()) &&
                        !TextUtils.isEmpty(mEvPasWord.getText().toString())){
                    getNetDataForPost("log_in",GET_LOGIN_URL, LoginBean.class);
                }
            }
        });


    }

    private void initData() {

    }

    @Override
    protected Map getApiParams(String action) {
        Map <String ,String >params = new HashMap<>();
        if (action.equals("log_in")) {
            if (!TextUtils.isEmpty(mPhoneNumber)) {
                params.put(DataConstants.TEL_NUMBER, mPhoneNumber);
            }
            if (!TextUtils.isEmpty(mPasWord)) {
                params.put(DataConstants.PASSWORD, mPasWord);
            }
        }else{
            params.put("logintype",mType);
            params.put("openid",mUserId);
            params.put("access_token", mToken);
        }
        return params;
    }

    @Override
    protected void success(String action, Object result) {
        if (result==null)return;
        LoginBean bean = (LoginBean) result;
        if (bean.getData() != null){

        }
    }

    @Override
    protected void fail(String action, String errorStr) {

    }

    @Override
    protected void netfail(String action, VolleyError volleyError) {

    }

    private void initHeaderView() {
        mHeaderView = (LinearLayout) findViewById(R.id.llt_header_view);
        btnLeft = (Button) mHeaderView.findViewById(R.id.btn_left_header);
        btnRight = (Button) mHeaderView.findViewById(R.id.btn_right_header);
        tv_Title = (TextView) mHeaderView.findViewById(R.id.tv_wherefrag_title);
        btnLeft.setBackgroundResource(R.drawable.back);
        btnRight.setVisibility(View.VISIBLE);
        tv_Title.setText("登录");
        tv_Title.setTextSize(18);
        tv_Title.setTextColor(this.getResources().getColor(R.color.white));
        btnLeft.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_login_regist:
                RegistActivity.launch(mContext);
                break;
            case R.id.tv_login_forgetpsd:
                ForgetPsdActivity.launch(mContext);
                break;
            case R.id.iv_login_delePhone:
                mEvPhoneNumber.setText("");
                break;
            case R.id.iv_login_delete_pasword:
                mEvPasWord.setText("");
                break;
            case R.id.iv_weichat_icon:
                //实现微信第三方登录操作事件
                //首先得到授权，授权成功后执行onComplete回调方法，
                Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
                wechat.SSOSetting(false);//false表示使用SSO授权方式
                wechat.setPlatformActionListener(this);
                wechat.authorize();
                break;
            case R.id.iv_qq_icon:
                Platform qq = ShareSDK.getPlatform(QQ.NAME);
                qq.SSOSetting(false);
                qq.setPlatformActionListener(this);
                qq.authorize();
                break;
            case R.id.iv_weibo_icon:
                Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
                weibo.SSOSetting(false);  //设置false表示使用SSO授权方式
                weibo.setPlatformActionListener(this); // 设置分享事件回调
                weibo.authorize();
                break;
            default:
                break;
        }
    }

    @Override
    public void setLeftButton(RelativeLayout relativeLayout, Button button) {

    }

    @Override
    public void setRightButton(RelativeLayout relativeLayout, Button button) {

    }

    @Override
    public Object getTitleString() {
        return "登录";
    }

    @Override
    public int getBodyView() {
        return R.layout.activity_login;
    }

    public static void launch(Context context,int type){
        Intent intent = new Intent(context,LoginActivity.class);
        intent.putExtra(DataConstants.LOGNIN_TYPE,type);
        context.startActivity(intent);
    }

    //以下三个方法为PlatformActionListener接口的实现方法
    @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
        int shortId = platform.getSortId();
        switch (shortId){
            case 1://SinaWeibo
                mType = "4";
                Platform weibo = ShareSDK.getPlatform(this,SinaWeibo.NAME);
                mToken = weibo.getDb().getToken();
                mUserId = weibo.getDb().getUserId();
                getNetDataForPost("sina",GET_LOGIN_URL,LoginBean.class);
                break;
            case 2://TencentWeibo

                break;
            case 3://QZone

                break;
            case 4://Wechat
                //访问微信登录接口，传入mToken,mOpenId值，得到isFrist值，并在下面success()方法中对其进行判断
                mType = "2";
                Platform weichat = ShareSDK.getPlatform(this, Wechat.NAME);
                mToken = weichat.getDb().getToken(); // 获取授权token
                mUserId = weichat.getDb().getUserId(); // 获取用户在此平台的ID
                getNetDataForPost("wechat", GET_LOGIN_URL, LoginBean.class);
                break;
            case 5://WechatMoments

                break;
            case 7://QQ
                mType = "3";
                Platform qq = ShareSDK.getPlatform(this, QQ.NAME);
                mToken = qq.getDb().getToken(); // 获取授权token
                mUserId = qq.getDb().getUserId(); // 获取用户在此平台的ID
                getNetDataForPost("qq", GET_LOGIN_URL, LoginBean.class);
                break;
        }
    }

    @Override
    public void onError(Platform platform, int i, Throwable throwable) {

    }

    @Override
    public void onCancel(Platform platform, int i) {

    }

    /*
    选择好平台以后，现在思考下面的问题：

你的应用是否具备独立账户系统？
这个问题是第三方登录时接口选择的重要标准。如果你选择“是”，则意味着你的应用只是需要第三方平台的用户，
而不是他们的账户验证功能——也就是“要数据，不要功能”。而如果你选择“否”，则表示你实际上是’“要功能，
不要数据（用户）”’。对于ShareSDK来说，前者你的入口方法是showUser(null)，而后者是authorize()。那么下
面我分情况解释两种接入方式的步骤。

要数据，不要功能

如果你的应用拥有用户系统，就是说你的应用自己就有注册和登录功能，使用第三方登录只是为了拥有更多用户，
那么你可以依照下面的步骤来做：

1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料（这个过程中可能涉及授权操作）
3、如果onComplete()方法被回调，将其参数Hashmap代入你应用的Login流程
4、否则提示错误，调用removeAccount(true)方法，删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户，则引导用户进入系统，否则返回特定错误码
7、客户端收到“未注册用户”错误码以后，代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段，并提交服务端注册
9、服务端完成用户注册，成功则反馈客户端引导用户进入系统
10、否则提示错误，调用removeAccount(true)方法，删除可能的授权缓存数据
要功能，不要数据

如果你的应用不具备用户系统，而且也不打算维护这个系统，那么你可以依照下面的步骤来做：

1、用户触发第三方登录事件
2、调用platform.getDb().getUserId()请求用户在此平台上的ID
3、如果用户ID存在，则认为用户是合法用户，允许进入系统；否则调用authorize()
4、authorize()方法将引导用户在授权页面输入帐号密码，然后目标平台将验证此用户
5、如果onComplete()方法被回调，表示授权成功，引导用户进入系统
6、否则提示错误，调用removeAccount(true)方法，删除可能的授权缓存数据*/

}
